#include <bits/stdc++.h>
using namespace std;
using uint=unsigned int;
using ll=long long;
using ull=unsigned long long;
using i128=__int128;
const int N=1e6+5;

int n,m,l,r;
int las[(1 << 18) + 9];
bool vis[(1 << 18) + 9];
vector<int>e[(1 << 18) + 9];
queue<int>q;
void bfs(){
	q.push(l);
	vis[l] = true;
	while(!q.empty()){
		int d = q.front();
		q.pop();
		for(int i = 0; i < e[d].size(); i ++){
			if(!vis[e[d][i]]){
				vis[e[d][i]] = true;
				q.push(e[d][i]);
				las[e[d][i]] = d;
			}
		}
	}
}
int main(){
	scanf("%d %d %d",&n,&l,&r);
	for(int i = 0; i < (1 << n); i ++){
		for(int j = 1; i + j <= (1 << n) && i % j == 0; j *= 2){
			e[i].push_back(i + j);
			e[i + j].push_back(i);
		}
	}
	bfs();
	int nw = r + 1;
	int sum = 0;
	while(nw != l){
		int o = las[nw];
		//printf(" %d %d\n",nw,o);
		if(nw > o){
			int sp = log2(nw - o),tp = o / (1 << sp);
			printf("? %d %d\n",sp,tp);
			fflush(stdout);
			int p;
			scanf("%d",&p);
			sum = (sum + p) % 100;
		}
		else{
			int sp = log2(o - nw),tp = nw / (1 << sp);
			printf("? %d %d\n",sp,tp);
			fflush(stdout);
			int p;
			scanf("%d",&p);
			sum = (sum - p + 100) % 100;
		}
		nw = o;
	}
	printf("! %d\n",sum);
	return 0;
}